<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link type="text/css" rel="stylesheet" href="styles.css">
  <script type="text/javascript" src="config.js"></script>
</head>

<body>
  <h1 class="h">4. 高级绘图</h1>
  <p>图形级函数通过 FacetGrid 的概念，让你能轻松创建基于数据子集的多面板网格。</p>
  <dl>
    <dt>1. 关系网格图 - sns.relplot()</dt>
    <dd>
      这是 scatterplot 和 lineplot 的图形级版本。
      <pre><code># 创建一个散点图网格，按列区分 time，按行区分 smoker
g = sns.relplot(
    data=tips, kind="scatter", # kind 默认为 'scatter'
    x="total_bill", y="tip",
    col="time", row="smoker", # 用 row 和 col 创建网格
    hue="size", size="size" # 在每个子图中依然可以使用 hue, size 等
)
g.fig.set_size_inches(12, 8) # 调整整个图形的大小
plt.show()</code></pre>
    </dd>
    <dt>2. 分类网格图 - sns.catplot()</dt>
    <dd>
      这是所有分类图（boxplot, violinplot, barplot 等）的图形级版本。
      <pre><code># 创建一组箱线图，按 day 分列，每个子图里用 hue 区分 smoker
g = sns.catplot(
    data=tips, kind="box",
    x="sex", y="total_bill",
    col="day", hue="smoker",
    height=4, aspect=0.7 # 控制每个子图的高度和宽高比
)
plt.show()

# 轻松切换图表类型
g = sns.catplot(data=tips, kind="violin", x="sex", y="total_bill", col="day")
plt.show()</code></pre>
    </dd>
    <dt>3. 分布网格图 - sns.displot()</dt>
    <dd>
      这是 histplot, kdeplot, ecdfplot 的图形级版本。
      <pre><code># 为不同性别和日期创建小费分布的直方图网格
g = sns.displot(
    data=tips, kind="hist", # kind 默认为 'hist'
    x="tip", col="sex", row="time",
    bins=20, kde=True # 传递给底层 histplot 的参数
)
plt.show()</code></pre>
    </dd>
    <dt>4. 配对图与联合分布图</dt>
    <dd>
      <ul>
        <li>
          sns.pairplot(): 绘制数据集中多个变量两两之间的散点图和分布图。
          <pre><code># 只选取数值列
g = sns.pairplot(tips, hue="smoker", corner=True) # corner=True 只显示下三角，避免重复
plt.show()</code></pre>
        </li>
        <li>
          sns.jointplot(): 专注于两个变量之间的关系，同时显示它们的边缘分布。
          <pre><code>g = sns.jointplot(data=tips, x="total_bill", y="tip", hue="time", kind="kde")
g.plot_joint(sns.scatterplot, s=15, alpha=.7) # 可以在基础上叠加散点
plt.show()</code></pre>
        </li>
      </ul>
    </dd>
  </dl>
</body>

</html>